package com.stars.services.system;


import com.stars.common.base.ResultMsg;
import com.stars.entity.dto.sys.SystemPermissionDTO;
import com.stars.entity.sys.SystemPermission;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.List;

/**
 * @author : dj
 * @version ：1.0.0
 * @Date : create by 2019/10/21 18:32
 * @description ：鉴权业务逻辑层
 * @note 注意事项
 */
public interface AuthAccessService {


    /**
     * 获取所有菜单
     * @param systemPermissionDTO 查询
     * @return 树形
     * @throws Exception
     */
    List<SystemPermissionDTO> findAllMenus(SystemPermissionDTO systemPermissionDTO) throws Exception;

    /**
     * 获取所胡菜单
     * @param systemPermissionDTO
     * @return list 集合
     * @throws Exception
     */
    List<SystemPermissionDTO> findUserMenusList(SystemPermissionDTO systemPermissionDTO) throws Exception;

    /**
     * 拼接用户权限，角色，个人，组织
     * 如果直接是超级用户，返回 findAllMenus（dto） 查询
     * @param systemPermissionDTO 查询条件，用户id不能为空
     * @return 树形
     * @throws Exception
     */
    List<SystemPermissionDTO> findAllTreeMenusList(SystemPermissionDTO systemPermissionDTO) throws Exception;

    /**
     * 查询用户拥有所有资源
     * @param systemPermissionDTO 查询条件，用户id不能为空
     * @return 资源集合
     * @throws Exception
     */
    List<SystemPermissionDTO> findAllMenusList(SystemPermissionDTO systemPermissionDTO) throws Exception;

    /**
     * 根据角色id查询该角色的资源权限
     * @param dto
     * @return 树形
     * @throws Exception
     */
    List<SystemPermissionDTO> findByRoleId(SystemPermissionDTO dto) throws Exception;

    /**
     * 根据用户ids查询资源
     * @param dto 用户id
     * @return 树形
     * @throws Exception
     */
    List<SystemPermissionDTO> findUserMenusTreeList(SystemPermissionDTO dto) throws Exception;

    /**
     * 根据组织查询资源
     * @param dto 组织id
     * @return 树形
     * @throws Exception
     */
    List<SystemPermissionDTO> findOrgMenusTreeList(SystemPermissionDTO dto) throws Exception;

    /**
     * 获取菜单
     * @param userId 用户
     * @param bntType 菜单类型
     * @return
     * @throws Exception
     */
    List<String>  getBtn(String userId, String bntType) throws Exception;
    /**
     * 登录验证
     * @param userId
     * @param token
     * @return
     */
    ResultMsg authLogin(String userId,String token)throws Exception;

    /**
     * 退出登录，清除redist 数据
     * @param token
     * @throws Exception
     */
    void authOutLogin(String token) throws Exception;

    /**
     * 查询用户是否是超级管理
     * @param userId 用户id
     * @return true 是，false ,否
     */
    Boolean userIsRoot(String userId)throws Exception;
}
